home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / lib / udev / hdparm < prev    next >
Text File  |  2009-10-06  |  6KB  |  258 lines

  1. #!/bin/sh
  2.  
  3. set -e
  4.  
  5. [ "$DEVNAME" ] || exit 1
  6.  
  7. if [ -e /proc/cmdline ]; then #linux only - future proofing against BSD and Hurd :)
  8.   if grep -wq "nohdparm" /proc/cmdline ; then
  9.     exit 0
  10.   fi
  11. fi
  12.  
  13. raidstat=OK
  14. if [ -e /proc/mdstat ]; then
  15.   if egrep -iq "resync|repair|recover|check" /proc/mdstat; then
  16.     raidstat=RESYNC
  17.   fi
  18. elif [ -e /proc/rd/status ]; then
  19.   raidstat=`cat /proc/rd/status`
  20. fi
  21.  
  22. if ! [ "$raidstat" = 'OK' ]; then
  23.   exit 1
  24. fi
  25.  
  26. isOnBattery() {
  27.     on_ac_power 2>/dev/null
  28.     [ $? -eq 1 ]
  29. }
  30.  
  31. set_option()
  32. {
  33.   if test -n "$DISC"; then
  34.     NEW_OPT=
  35.     for i in $OPTIONS; do
  36.       if test x${i%${i#??}} != x${1%${1#??}}; then
  37.         NEW_OPT="$NEW_OPT $i"
  38.       else
  39.         NEW_OPT=${NEW_OPT%-q}
  40.       fi
  41.     done
  42.     OPTIONS="$NEW_OPT $OPT_QUIET $1"
  43.   else
  44.     NEW_DEF=
  45.     for i in $DEFAULT; do
  46.       if test x${i%${i#??}} != x${1%${1#??}}; then
  47.         NEW_DEF="$NEW_DEF $i"
  48.       else
  49.         NEW_DEF=${NEW_DEF%-q}
  50.       fi
  51.     done
  52.     DEFAULT="$NEW_DEF $DEF_QUIET $1"
  53.   fi
  54. }
  55.  
  56. eval_value()
  57. {
  58.   case $1 in
  59.     off|0)
  60.       set_option "$2"0
  61.        ;;
  62.     on|1)
  63.       set_option "$2"1
  64.       ;;
  65.     *)
  66.       log_failure_msg "Unknown Value for $2: $1"
  67.       exit 1
  68.       ;;
  69.   esac
  70. }
  71.  
  72. WAS_RUN=0
  73.  
  74. # Get blocks as far as the drive's write cache.
  75. /bin/sync
  76.  
  77. DISC=
  78. DEFAULT=
  79. OPTIONS=
  80. DEF_QUIET=
  81. OPT_QUIET=
  82.  
  83. egrep -v '^[[:space:]]*(#|$)' /etc/hdparm.conf | 
  84. {
  85.   while read KEY SEP VALUE; do
  86.     if [ "$NEXT_LINE" != 'go' ]; then
  87.       case $SEP in
  88.         '{')
  89.           case $KEY in
  90.             command_line)
  91.               NEXT_LINE=go
  92.               unset DISC
  93.               unset OPTIONS
  94.               unset OPT_QUIET
  95.               IN_BLOCK=0
  96.               ;;
  97.             *)
  98.               DISC=$KEY
  99.               OPTIONS=$DEFAULT
  100.               OPT_QUIET=$DEF_QUIET
  101.               WAS_RUN=0
  102.               if [ "$DISC" = "$DEVNAME" ]; then
  103.                 IN_BLOCK=1
  104.               else
  105.                 IN_BLOCK=0
  106.               fi
  107.               ;;
  108.           esac
  109.           ;;
  110.         =)
  111.           case $KEY in
  112.             read_ahead_sect) 
  113.               set_option -a$VALUE
  114.               ;;
  115.             lookahead) 
  116.               eval_value $VALUE -A
  117.               ;;
  118.             bus) 
  119.               eval_value $VALUE -b
  120.               ;;
  121.             apm)
  122.               if ! isOnBattery; then
  123.                   set_option -B$VALUE
  124.               fi
  125.               ;;
  126.             apm_battery)
  127.               if isOnBattery; then
  128.                   set_option -B$VALUE
  129.               fi
  130.               ;;
  131.             io32_support) 
  132.               set_option -c$VALUE
  133.               ;;
  134.             dma) 
  135.               eval_value $VALUE -d
  136.               ;;
  137.             defect_mana) 
  138.               eval_value $VALUE -D
  139.               ;;
  140.             cd_speed) 
  141.               set_option -E$VALUE
  142.               ;;
  143.             mult_sect_io) 
  144.               set_option -m$VALUE
  145.               ;;
  146.             prefetch_sect) 
  147.               set_option -P$VALUE
  148.               ;;
  149.             read_only) 
  150.               eval_value $VALUE -r
  151.               ;;
  152.             spindown_time) 
  153.               set_option -S$VALUE
  154.               ;;
  155.             poweron_standby) 
  156.               eval_value $VALUE -s
  157.               ;;
  158.             interrupt_unmask) 
  159.               eval_value $VALUE -u
  160.               ;;
  161.             write_cache) 
  162.               eval_value $VALUE -W
  163.               ;;
  164.             transfer_mode) 
  165.               set_option -X$VALUE
  166.               ;;
  167.             acoustic_management)
  168.               set_option -M$VALUE
  169.               ;;
  170.             keep_settings_over_reset)
  171.               eval_value $VALUE -k
  172.              ;;
  173.             keep_features_over_reset)
  174.               eval_value $VALUE -K
  175.              ;;
  176.             chipset_pio_mode)
  177.               set_option -p$VALUE
  178.              ;;
  179.             security_unlock)
  180.               set_option --security-unlock $VALUE
  181.              ;;
  182.             security_pass)
  183.               set_option --security-set-pass $VALUE
  184.              ;;
  185.             security_disable)
  186.               set_option --security-disable $VALUE
  187.              ;;
  188.             user-master)
  189.               set_option --user-master $VALUE
  190.               ;;
  191.             security_mode)
  192.               set_option --security-mode $VALUE
  193.              ;;
  194.             ROOTFS)
  195.               ROOTFS=$VALUE
  196.              ;; 
  197.             *)
  198.               echo "Unknown option $KEY"
  199.               exit 1
  200.               ;;
  201.           esac
  202.           ;;
  203.         "")
  204.           case $KEY in
  205.             '}')
  206.               if [ -z "$DISC" ] && [ "$WAS_RUN" != '1' ]; then
  207.         echo "No disk enabled. Exiting"
  208.                 exit 1
  209.               fi
  210.               if [ -n "$OPTIONS" ] && [ -b "$DISC" ]; then
  211.                 ret=0
  212.                 if [ "$IN_BLOCK" = 1 ]; then
  213.                   # Flush the drive's internal write cache to the disk.
  214.                   /sbin/hdparm -q -f $DISC 2>/dev/null || ret=$?
  215.                   /sbin/hdparm $OPTIONS $DISC 2>/dev/null || ret=$?
  216.                 fi
  217.               fi       
  218.               ;;
  219.             quiet)
  220.               if [ -n "$DISC" ]; then
  221.                 OPT_QUIET=-q
  222.               else
  223.                 DEF_QUIET=-q
  224.               fi
  225.               ;;
  226.             standby) 
  227.               set_option -y
  228.               ;;
  229.             sleep) 
  230.               set_option -Y
  231.               ;;
  232.             disable_seagate) 
  233.               set_option -Z
  234.               ;;
  235.             security_freeze) 
  236.               set_option --security-freeze
  237.               ;;
  238.             *)
  239.               echo "unknown option $KEY"
  240.               exit 1
  241.               ;;
  242.           esac
  243.           ;;
  244.        *)
  245.          echo "unknown separator $SEP"
  246.          exit 1
  247.          ;;
  248.       esac
  249.     else
  250.       $KEY $SEP $VALUE
  251.       NEXT_LINE=no-go
  252.       WAS_RUN=1
  253.     fi
  254.   done
  255. }
  256.  
  257. exit 0
  258.